package net.cassite.daf4j.stream;

import net.cassite.daf4j.*;

/**
 * Stream风格的查询,由QueryStream的mapToLong开启.<br>
 * 包含Long类型的Stream<br>
 * 额外提供sum,average,max,min方法.<br>
 * 此外,若实体未实现SortedEntity,那么将使用构造时传入的DataComparable.asc作排序依据
 *
 * @param <E> 实体类型
 * @see QueryStream#mapToInt(DataComparable)
 * @see DataComparable#asc()
 */
public class QueryLongStream<E> extends QueryNumStreamBase<E, Long, QueryLongStream<E>> {
        protected QueryLongStream(E entity, DataAccess dataAccess, AndOr andOr, QueryParameter parameter, DataComparable<Long> longData) {
                super(entity, dataAccess, andOr, parameter, longData);
        }

        /**
         * 执行求和操作
         *
         * @return long类型的求和结果
         */
        public long sum() {
                return DataUtils.executeSumLong(entity, andOr, parameter, data, dataAccess);
        }

        /**
         * 执行求最大值操作
         *
         * @return long类型的求最大值结果
         */
        public long max() {
                return DataUtils.executeMaxLong(entity, andOr, parameter, data, dataAccess);
        }

        /**
         * 执行求最小值操作
         *
         * @return long类型的求最小值结果
         */
        public long min() {
                return DataUtils.executeMinLong(entity, andOr, parameter, data, dataAccess);
        }
}
